IUCN Red List Stats

Aim

I aim to explore how climate change affects endangered species throughout the world. I am interested in studying how trends in global warming, specifically annual surface temperature change, impact endangered species. I plan to compare yearly climate change trends with the number of endangered species on the Red List from 1996 to 2022. Hsiung and Sunstein (2007) mention that the current effects of climate change have already impacted animal life substantially (p. 1696). On a more governmental approach to this issue, Rhul (2008) explores what actions the US Fish and Wildlife Service (FWS) should take to support the Endangered Species Act (ESA) (p. 13). Unfortunately, as of 2019, agency plans remained inadequate in relation to conservation of US endangered species according to Delach, Caldas, Edson, et al. (p. 999). I will also perform a study of the correlation between annual surface temperature change per country with the top ten countries with the most endangered species (as of 2019).

General Question of Investigation

How does climate change impact the number of endangered species?

Scope and System

The scope of the analysis will be conducted globally by studying global climate change patterns as well as globally threatened species. The system will examine the interactions between annual changes in surface temperature and number of endangered species. The project will primarily focus on climate change and the number of endangered species on the Red List from 1996 to 2022 per year, as well as how surface temperature changes in each country affect the number of endangered species in the ten countries with the most endangered species as of 2019.

Methods

Data was collected from existing datasets found on the Internet. Data has been found on the IMF climate change dashboard for annual surface temperature change from 1961 to 2022 per country. Endangered species data (“Number of endangered species on the Red List from 1996 to 2022”) has been collected by the Statista Research Department to examine the relationship between climate change and the number of endangered species. These data sets were joined on the basis of year. The figures in the project displayed global warming trends as well as their relationship with the number of endangered species on the Red List. Using the same dataset for annual surface temperature change as well as the dataset “Countries with the most endangered species 2019,” a study of the correlation between surface temperature change per country and the number of endangered species per country was able to be conducted. These datasets were joined on the basis of country to compare the relationship between climate change trends and the number of endangered species per country for ten countries. In order to view the relationship between countries and the number of endangered species on a map, the “Countries geographic coordinates” dataset was used to obtain the latitude and longitude values for each country.

Results

This first graph displays annual surface temperature changes per year in relation to a baseline climatology conducted for the years 1951 to 1980. Beginning in 1977, the figure demonstrates a general positive trend such that as the years progress, the average surface temperature increases.

This figure displays the number of endangered species on the Red List reported by the International Union for Conservation of Nature and Natural Resources (IUCN) per year. Based on this graph, it is evident that there is a positive trend between the total number of endangered species and year, such that as the years progress, the total number of species on the Red List increases. Over 40,000 species (4.2108^{4} to be exact) were on the IUCN Red List in 2022.

This figure breaks down the total number of endangered species on the Red List per year into kingdoms. It is evident that there is the largest number of endangered plant species reported per year while fungi & protists have the fewest reported endangered species (with none reported before 2003). In 2022 alone, over half of the reported endangered species were plants!

Joining, by = "Year"

This graph displays the total number of endangered species on the IUCN Red List from 1996-2022 in relation to the annual surface temperature change measured with respect to a baseline climatology conducted from 1951 to 1980. Although the average surface temperature change fluctuates slightly over the years, there is a general increase in temperature. This figure illustrates that as the years progress, the total number of endangered species on the Red List increases, and there is a general incrase in surface temperature as well.

This figure illustrates an exponential relationship between the total number of endangered species on the Red List and time. The color of the points demonstrates that there is a general increase in average surface temperature over time as well.

Map Displaying the Number of Endangered Species per Country

This map illustrates where in the world countries with reported numbers of endangered species are located. The color of the point correlates to the total number of endangered species for that particular country. Mexico has a bright yellow point because it has the highest reported number of endangered species. Many of the other countries have less than 100 endangered species, explaining the abundance of purple points.

This figure makes it evident that European countries have experienced the greatest surface temperature changes due to the abundance of red bars. Oceania and South America appear to have less data points, yet also lesser changes in surface temperature as of 2019. There was no data for Antarctica.

This map illustrates surface temperature change in 2019 per country measured with respect to a baseline climatology (conducted from 1951-1980). The scale on the right indicates that the darker the country is filled in, the higher the change in surface temperature it experienced in 2019. The labels indicate the number of endangered species in the top 10 countries with the highest number of reported endangered species as of 2019. Although Mexico has the most endangered species, it has not necessarily experienced the greatest change in surface temperature.

Main Conclusions

The main conclusions demonstrated by the figures above show that the number of endangered species increases as surface temperatures increase, although there isn’t necessarily a direct correlation between the two. The study of these trends will benefit government agencies such as the World Wildlife Fund, the U.S. Fish and Wildlife Service, and other agencies interested in the preservation of endangered animal species. These interactions can be studied more closely in the future by focusing on a particular geographic area and the types of endangered species located there. There is no singular solution to global warming, however in order for certain species to remain existent on Earth, something must be done to slow climate change.

Ten animals on The IUCN Red List of Threatened Species

References

Alves, B. (2023). Countries with the most endangered species 2019. Statista. Retrieved April 24, 2023, from https://www.statista.com/statistics/1275491/most-endangered-species-by-country/

Delach, A., Caldas, A., Edson, K.M. et al. (2019) Agency plans are inadequate to conserve US endangered species under climate change. Nature Climate Change, 9, 999–1004. https://doi.org/10.1038/s41558-019-0620-8

Cohen, E. (n.d.). Countries geographic coordinates. Kaggle. Retrieved April 26, 2023, from https://www.kaggle.com/datasets/eidanch/counties-geographic-coordinates

Flach, T. (2020). 26 endangered animals we need to save now. CN Traveller. Retrieved April 29, 2023, from https://www.cntraveller.com/gallery/endangered-animals

Hsiung, W., & Sunstein, C. R. (2007). Climate change and animals. University of Pennsylvania Law Review, 155(6), 1695-1740.

International Monetary Fund. (2022). Climate Change Data. Climate Change Indicators Dashboard. Retrieved April 21, 2023, from https://climatedata.imf.org/pages/climatechange-data

Ruhl, J. J. (2008). Climate change and the endangered species act: building bridges to the no-analog future. Boston University Law Review, 88(1), 1-62.

Statista Research Department. (2022). Species on the Red List up to 2022. Statista. Retrieved April 21, 2023, from https://www.statista.com/statistics/264841/biodiversity-animals-on-the-red-list/

LS0tCnRpdGxlOiAiQW5udWFsIFN1cmZhY2UgVGVtcGVyYXR1cmUgQ2hhbmdlIEVmZmVjdHMgb24gRW5kYW5nZXJlZCBTcGVjaWVzIgphdXRob3I6ICJMdWN5IFNoZXR0ZWwiCmRhdGU6IE1heSA1LCAyMDIzCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazogCiAgICB0b2M6IHRydWUKICAgIHRvY19kZXB0aDogMQogICAgdGhlbWU6IGpvdXJuYWwKLS0tCgohW0lVQ04gUmVkIExpc3QgU3RhdHNdKERlc2t0b3AvR0NTLVIvUmVkX0xpc3RfaW1hZ2UucG5nKQoKCiMgQWltCkkgYWltIHRvIGV4cGxvcmUgaG93ICoqY2xpbWF0ZSBjaGFuZ2UgYWZmZWN0cyBlbmRhbmdlcmVkIHNwZWNpZXMqKiB0aHJvdWdob3V0IHRoZSB3b3JsZC4gSSBhbSBpbnRlcmVzdGVkIGluIHN0dWR5aW5nIGhvdyB0cmVuZHMgaW4gZ2xvYmFsIHdhcm1pbmcsIHNwZWNpZmljYWxseSAqKmFubnVhbCBzdXJmYWNlIHRlbXBlcmF0dXJlIGNoYW5nZSoqLCBpbXBhY3QgZW5kYW5nZXJlZCBzcGVjaWVzLiBJIHBsYW4gdG8gKipjb21wYXJlIHllYXJseSBjbGltYXRlIGNoYW5nZSB0cmVuZHMgd2l0aCB0aGUgbnVtYmVyIG9mIGVuZGFuZ2VyZWQgc3BlY2llcyBvbiB0aGUgUmVkIExpc3QgZnJvbSBgciBlc2J5X3RvdGFscyRZZWFyWzFdYCB0byBgciBlc2J5X3RvdGFscyRZZWFyW25yb3coZXNieV90b3RhbHMpXWAuKiogSHNpdW5nIGFuZCBTdW5zdGVpbiAoMjAwNykgbWVudGlvbiB0aGF0IHRoZSBjdXJyZW50IGVmZmVjdHMgb2YgY2xpbWF0ZSBjaGFuZ2UgaGF2ZSBhbHJlYWR5IGltcGFjdGVkIGFuaW1hbCBsaWZlIHN1YnN0YW50aWFsbHkgKHAuIDE2OTYpLiBPbiBhIG1vcmUgZ292ZXJubWVudGFsIGFwcHJvYWNoIHRvIHRoaXMgaXNzdWUsIFJodWwgKDIwMDgpIGV4cGxvcmVzIHdoYXQgYWN0aW9ucyB0aGUgVVMgRmlzaCBhbmQgV2lsZGxpZmUgU2VydmljZSAoRldTKSBzaG91bGQgdGFrZSB0byBzdXBwb3J0IHRoZSBFbmRhbmdlcmVkIFNwZWNpZXMgQWN0IChFU0EpIChwLiAxMykuIFVuZm9ydHVuYXRlbHksIGFzIG9mIDIwMTksIGFnZW5jeSBwbGFucyByZW1haW5lZCBpbmFkZXF1YXRlIGluIHJlbGF0aW9uIHRvIGNvbnNlcnZhdGlvbiBvZiBVUyBlbmRhbmdlcmVkIHNwZWNpZXMgYWNjb3JkaW5nIHRvIERlbGFjaCwgQ2FsZGFzLCBFZHNvbiwgZXQgYWwuIChwLiA5OTkpLiBJIHdpbGwgYWxzbyBwZXJmb3JtIGEgc3R1ZHkgb2YgdGhlICoqY29ycmVsYXRpb24gYmV0d2VlbiBhbm51YWwgc3VyZmFjZSB0ZW1wZXJhdHVyZSBjaGFuZ2UgcGVyIGNvdW50cnkgd2l0aCB0aGUgdG9wIHRlbiBjb3VudHJpZXMgd2l0aCB0aGUgbW9zdCBlbmRhbmdlcmVkIHNwZWNpZXMgKGFzIG9mIDIwMTkpLioqIAoKIyBHZW5lcmFsIFF1ZXN0aW9uIG9mIEludmVzdGlnYXRpb24KPiBfSG93IGRvZXMgY2xpbWF0ZSBjaGFuZ2UgaW1wYWN0IHRoZSBudW1iZXIgb2YgZW5kYW5nZXJlZCBzcGVjaWVzP18gCgojIFNjb3BlIGFuZCBTeXN0ZW0KVGhlIHNjb3BlIG9mIHRoZSBhbmFseXNpcyB3aWxsIGJlIGNvbmR1Y3RlZCBnbG9iYWxseSBieSBzdHVkeWluZyBnbG9iYWwgY2xpbWF0ZSBjaGFuZ2UgcGF0dGVybnMgYXMgd2VsbCBhcyBnbG9iYWxseSB0aHJlYXRlbmVkIHNwZWNpZXMuIFRoZSBzeXN0ZW0gd2lsbCBleGFtaW5lIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBhbm51YWwgY2hhbmdlcyBpbiBzdXJmYWNlIHRlbXBlcmF0dXJlIGFuZCBudW1iZXIgb2YgZW5kYW5nZXJlZCBzcGVjaWVzLiBUaGUgcHJvamVjdCB3aWxsIHByaW1hcmlseSBmb2N1cyBvbiBjbGltYXRlIGNoYW5nZSBhbmQgdGhlIG51bWJlciBvZiBlbmRhbmdlcmVkIHNwZWNpZXMgb24gdGhlIFJlZCBMaXN0IGZyb20gYHIgZXNieV90b3RhbHMkWWVhclsxXWAgdG8gYHIgZXNieV90b3RhbHMkWWVhcltucm93KGVzYnlfdG90YWxzKV1gIHBlciB5ZWFyLCBhcyB3ZWxsIGFzIGhvdyBzdXJmYWNlIHRlbXBlcmF0dXJlIGNoYW5nZXMgaW4gZWFjaCBjb3VudHJ5IGFmZmVjdCB0aGUgbnVtYmVyIG9mIGVuZGFuZ2VyZWQgc3BlY2llcyBpbiB0aGUgdGVuIGNvdW50cmllcyB3aXRoIHRoZSBtb3N0IGVuZGFuZ2VyZWQgc3BlY2llcyBhcyBvZiAyMDE5LgoKCiMgTWV0aG9kcwpEYXRhIHdhcyBjb2xsZWN0ZWQgZnJvbSBleGlzdGluZyBkYXRhc2V0cyBmb3VuZCBvbiB0aGUgSW50ZXJuZXQuIERhdGEgaGFzIGJlZW4gZm91bmQgb24gdGhlIFtJTUYgY2xpbWF0ZSBjaGFuZ2UgZGFzaGJvYXJkXShodHRwczovL2NsaW1hdGVkYXRhLmltZi5vcmcvcGFnZXMvY2xpbWF0ZWNoYW5nZS1kYXRhKSBmb3IgYW5udWFsIHN1cmZhY2UgdGVtcGVyYXR1cmUgY2hhbmdlIGZyb20gMTk2MSB0byAyMDIyIHBlciBjb3VudHJ5LiBFbmRhbmdlcmVkIHNwZWNpZXMgZGF0YSAo4oCcW051bWJlciBvZiBlbmRhbmdlcmVkIHNwZWNpZXMgb24gdGhlIFJlZCBMaXN0IGZyb20gMTk5NiB0byAyMDIyXShodHRwczovL3d3dy5zdGF0aXN0YS5jb20vc3RhdGlzdGljcy8yNjQ4NDEvYmlvZGl2ZXJzaXR5LWFuaW1hbHMtb24tdGhlLXJlZC1saXN0LykiKSBoYXMgYmVlbiBjb2xsZWN0ZWQgYnkgdGhlIFN0YXRpc3RhIFJlc2VhcmNoIERlcGFydG1lbnQgdG8gZXhhbWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gY2xpbWF0ZSBjaGFuZ2UgYW5kIHRoZSBudW1iZXIgb2YgZW5kYW5nZXJlZCBzcGVjaWVzLiBUaGVzZSBkYXRhIHNldHMgd2VyZSBqb2luZWQgb24gdGhlIGJhc2lzIG9mIHllYXIuIFRoZSBmaWd1cmVzIGluIHRoZSBwcm9qZWN0IGRpc3BsYXllZCBnbG9iYWwgd2FybWluZyB0cmVuZHMgYXMgd2VsbCBhcyB0aGVpciByZWxhdGlvbnNoaXAgd2l0aCB0aGUgbnVtYmVyIG9mIGVuZGFuZ2VyZWQgc3BlY2llcyBvbiB0aGUgUmVkIExpc3QuIFVzaW5nIHRoZSBzYW1lIGRhdGFzZXQgZm9yIGFubnVhbCBzdXJmYWNlIHRlbXBlcmF0dXJlIGNoYW5nZSBhcyB3ZWxsIGFzIHRoZSBkYXRhc2V0IOKAnFtDb3VudHJpZXMgd2l0aCB0aGUgbW9zdCBlbmRhbmdlcmVkIHNwZWNpZXMgMjAxOV0oaHR0cHM6Ly93d3cuc3RhdGlzdGEuY29tL3N0YXRpc3RpY3MvMTI3NTQ5MS9tb3N0LWVuZGFuZ2VyZWQtc3BlY2llcy1ieS1jb3VudHJ5Lyks4oCdIGEgc3R1ZHkgb2YgdGhlIGNvcnJlbGF0aW9uIGJldHdlZW4gc3VyZmFjZSB0ZW1wZXJhdHVyZSBjaGFuZ2UgcGVyIGNvdW50cnkgYW5kIHRoZSBudW1iZXIgb2YgZW5kYW5nZXJlZCBzcGVjaWVzIHBlciBjb3VudHJ5IHdhcyBhYmxlIHRvIGJlIGNvbmR1Y3RlZC4gVGhlc2UgZGF0YXNldHMgd2VyZSBqb2luZWQgb24gdGhlIGJhc2lzIG9mIGNvdW50cnkgdG8gY29tcGFyZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gY2xpbWF0ZSBjaGFuZ2UgdHJlbmRzIGFuZCB0aGUgbnVtYmVyIG9mIGVuZGFuZ2VyZWQgc3BlY2llcyBwZXIgY291bnRyeSBmb3IgdGVuIGNvdW50cmllcy4gSW4gb3JkZXIgdG8gdmlldyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyaWVzIGFuZCB0aGUgbnVtYmVyIG9mIGVuZGFuZ2VyZWQgc3BlY2llcyBvbiBhIG1hcCwgdGhlICJbQ291bnRyaWVzIGdlb2dyYXBoaWMgY29vcmRpbmF0ZXNdKGh0dHBzOi8vd3d3LmthZ2dsZS5jb20vZGF0YXNldHMvZWlkYW5jaC9jb3VudGllcy1nZW9ncmFwaGljLWNvb3JkaW5hdGVzKSIgZGF0YXNldCB3YXMgdXNlZCB0byBvYnRhaW4gdGhlIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgdmFsdWVzIGZvciBlYWNoIGNvdW50cnkuIAoKIyBSZXN1bHRzCgpgYGB7ciBsb2FkIHBhY2thZ2VzLCBpbmNsdWRlID0gRkFMU0V9CmxpYnJhcnkoZm9yY2F0cykKbGlicmFyeShtYXB2aWV3KQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeSh2aXJpZGlzKQpsaWJyYXJ5KHNmKQpsaWJyYXJ5KHJuYXR1cmFsZWFydGgpCmxpYnJhcnkocm5hdHVyYWxlYXJ0aGRhdGEpCmBgYAoKCmBgYHtyIGxvYWQgZGF0YSwgaW5jbHVkZSA9IEZBTFNFfQpzdXJmYWNlX3RlbXAgPC0gcmVhZF9jc3YoIi9Vc2Vycy9sdWN5c2hldHRlbC9EZXNrdG9wL0dDUy1SL0FubnVhbF9TdXJmYWNlX1RlbXBlcmF0dXJlX0NoYW5nZS5jc3YiKQplbmRhbmdlcmVkX3NwZWNpZXNfYnlfeWVhciA8LSByZWFkX2NzdigiL1VzZXJzL2x1Y3lzaGV0dGVsL0Rlc2t0b3AvR0NTLVIvRW5kYW5nZXJlZF9TcGVjaWVzX1llYXIuY3N2IikKY291bnRyeV9lbmRhbmdfc3BlY2llcyA8LSByZWFkX2NzdigiL1VzZXJzL2x1Y3lzaGV0dGVsL0Rlc2t0b3AvR0NTLVIvQW5pbWFsX0NvdW50cnlfMjAxOS5jc3YiKQpjb3VudHJpZXMgPC0gcmVhZF9jc3YoIi9Vc2Vycy9sdWN5c2hldHRlbC9EZXNrdG9wL0dDUy1SL2NvdW50cmllcy5jc3YiKQpgYGAKCmBgYHtyIFllYXJseSBBdmcgVGVtcGVyYXR1cmVzLCBpbmNsdWRlID0gRkFMU0V9CgojU2VsZWN0IHllYXJzIGZyb20gc3VyZmFjZSB0ZW1wZXJhdHVyZSBkYXRhIAp5ZWFyX2NvbCA8LSBzZWxlY3Qoc3VyZmFjZV90ZW1wLCBzdGFydHNfd2l0aCgnRicpKQoKI0NhbGN1bGF0ZSBhdmVyYWdlIHRlbXBlcmF0dXJlIGluY3JlYXNlIHBlciB5ZWFyCnllYXJseV9hdmdfdGVtcCA8LSB5ZWFyX2NvbCAlPiUKICBzdW1tYXJpc2UoYWNyb3NzKHdoZXJlKGlzLm51bWVyaWMpLCBtZWFuLCBuYS5ybSA9IFRSVUUpKSAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gRjE5NjE6RjIwMjIsIAogICAgbmFtZXNfdG8gPSAieWVhciIsIAogICAgdmFsdWVzX3RvID0gImF2Z190ZW1wIikKYGBgCgoKYGBge3IgRGlzcGxheSBBbm51YWwgU3VyZmFjZSBUZW1wZXJhdHVyZSBDaGFuZ2VzLCBlY2hvID0gRkFMU0V9CgojQ3JlYXRlIGdyYXBoIGRpc3BsYXlpbmcgYW5udWFsIHN1cmZhY2UgdGVtcGVyYXR1cmUgY2hhbmdlcyBpbiByZWxhdGlvbiB0byBhIGJhc2VsaW5lIGNsaW1hdG9sb2d5IApnZ3Bsb3QoZGF0YSA9IHllYXJseV9hdmdfdGVtcCkgKyAKICBnZW9tX2JhcihtYXBwaW5nID0gYWVzKHggPSB5ZWFyLCB5ID0gYXZnX3RlbXAsIGZpbGwgPSBhdmdfdGVtcCksIHN0YXQgPSAiaWRlbnRpdHkiKSArIAogIGxhYnMoeCA9ICJZZWFyIiwgeSA9ICJBdmVyYWdlIENoYW5nZSBpbiBTdXJmYWNlIFRlbXBlcmF0dXJlICjCsEMpIiwgdGl0bGUgPSAiQW5udWFsIG1lYW4gc3VyZmFjZSB0ZW1wZXJhdHVyZSBjaGFuZ2Vcbm1lYXN1cmVkIHdpdGggcmVzcGVjdCB0byBhIGJhc2VsaW5lIGNsaW1hdG9sb2d5LFxuY29ycmVzcG9uZGluZyB0byB0aGUgeWVhcnMgMTk1MS0xOTgwIikgKwogIHRoZW1lX2RhcmsoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2NSwgaGp1c3QgPTEsIHNpemUgPSA2LjUpLCBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MTUsIGZhY2U9ImJvbGQiLCAgaGp1c3QgPSAwLjUpKSArCiAgc2NhbGVfZmlsbF9jb250aW51b3VzKGxvdz0ieWVsbG93IiwgaGlnaCA9ICJyZWQiLCBuYW1lID0gIkF2ZXJhZ2VcblRlbXBlcmF0dXJlXG5DaGFuZ2UgKMKwQykiKSArCiAgc2NhbGVfeF9kaXNjcmV0ZSgiWWVhciIsIGxhYmVscyA9IHN1YnN0cih5ZWFybHlfYXZnX3RlbXAkeWVhciwgMiw1KSkKYGBgCgpUaGlzIGZpcnN0IGdyYXBoIGRpc3BsYXlzIGFubnVhbCBzdXJmYWNlIHRlbXBlcmF0dXJlIGNoYW5nZXMgcGVyIHllYXIgaW4gcmVsYXRpb24gdG8gYSBiYXNlbGluZSBjbGltYXRvbG9neSBjb25kdWN0ZWQgZm9yIHRoZSB5ZWFycyAxOTUxIHRvIDE5ODAuIEJlZ2lubmluZyBpbiAxOTc3LCB0aGUgZmlndXJlIGRlbW9uc3RyYXRlcyBhIGdlbmVyYWwgcG9zaXRpdmUgdHJlbmQgc3VjaCB0aGF0IGFzIHRoZSB5ZWFycyBwcm9ncmVzcywgdGhlIGF2ZXJhZ2Ugc3VyZmFjZSB0ZW1wZXJhdHVyZSBpbmNyZWFzZXMuCgpgYGB7ciBFbmRhbmdlcmVkIFNwZWNpZXMgQnkgWWVhciwgZWNobyA9IEZBTFNFfQoKI0NyZWF0ZSB0YWJsZSBjb250YWluaW5nIGp1c3QgdGhlIG51bWJlcnMgb2YgZW5kYW5nZXJlZCBzcGVjaWVzIHBlciBraW5nZG9tCmVuZGFuZ19zcGVjIDwtIHNlbGVjdChlbmRhbmdlcmVkX3NwZWNpZXNfYnlfeWVhciwgLVllYXIpCgojQ2FsY3VsYXRlIHRvdGFsIG51bWJlciBvZiBlbmRhbmdlcmVkIHNwZWNpZXMgcGVyIHllYXIgKHJvdykgCmVzYnlfd2l0aF90b3RhbHMgPC0gZW5kYW5nZXJlZF9zcGVjaWVzX2J5X3llYXIgJT4lIAogIG11dGF0ZSh0b3RhbCA9IHJvd1N1bXMoZW5kYW5nX3NwZWMsIG5hLnJtPVRSVUUpKQoKI0Rpc3BsYXkgZ3JhcGggb2YgdGhlIHRvdGFsIG51bWJlciBvZiByZXBvcnRlZCBlbmRhbmdlcmVkIHNwZWNpZXMgcGVyIHllYXIKZ2dwbG90KGRhdGEgPSBlc2J5X3dpdGhfdG90YWxzKSArIAogIGdlb21fYmFyKG1hcHBpbmcgPSBhZXMoeCA9IFllYXIsIHkgPSB0b3RhbCwgZmlsbCA9IHRvdGFsKSwgc3RhdCA9ICJpZGVudGl0eSIpICsgCiAgbGFicyh4ID0gIlllYXIiLCB5ID0gIlRvdGFsIE51bWJlciBvZiBFbmRhbmdlcmVkIFNwZWNpZXMiLCB0aXRsZSA9ICJUb3RhbCBOdW1iZXIgb2YgRW5kYW5nZXJlZCBTcGVjaWVzIG9uIHRoZSBJVUNOIFJlZCBMaXN0XG5wZXIgWWVhciBmcm9tIDE5OTYtMjAyMiIpICsKICBzY2FsZV9maWxsX3ZpcmlkaXMoKSArIHRoZW1lX2RhcmsoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPTEpLCBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MTUsIGZhY2U9ImJvbGQiLCBoanVzdCA9IDAuNSkpICsKICBnZW9tX3RleHQoYWVzKHggPSBZZWFyLCB5ID0gdG90YWwtMTAwMCwgbGFiZWwgPSB0b3RhbCksIHNpemUgPSAxLjUsIGNvbG9yID0gImdyZXkiKQoKYGBgCgpUaGlzIGZpZ3VyZSBkaXNwbGF5cyB0aGUgbnVtYmVyIG9mIGVuZGFuZ2VyZWQgc3BlY2llcyBvbiB0aGUgUmVkIExpc3QgcmVwb3J0ZWQgYnkgdGhlIEludGVybmF0aW9uYWwgVW5pb24gZm9yIENvbnNlcnZhdGlvbiBvZiBOYXR1cmUgYW5kIE5hdHVyYWwgUmVzb3VyY2VzIChJVUNOKSBwZXIgeWVhci4gQmFzZWQgb24gdGhpcyBncmFwaCwgaXQgaXMgZXZpZGVudCB0aGF0IHRoZXJlIGlzIGEgcG9zaXRpdmUgdHJlbmQgYmV0d2VlbiB0aGUgdG90YWwgbnVtYmVyIG9mIGVuZGFuZ2VyZWQgc3BlY2llcyBhbmQgeWVhciwgc3VjaCB0aGF0IGFzIHRoZSB5ZWFycyBwcm9ncmVzcywgdGhlIHRvdGFsIG51bWJlciBvZiBzcGVjaWVzIG9uIHRoZSBSZWQgTGlzdCBpbmNyZWFzZXMuIE92ZXIgNDAsMDAwIHNwZWNpZXMgKGByIGVzYnlfd2l0aF90b3RhbHMkdG90YWxbbnJvdyhlc2J5X3dpdGhfdG90YWxzKV1gIHRvIGJlIGV4YWN0KSB3ZXJlIG9uIHRoZSBJVUNOIFJlZCBMaXN0IGluIDIwMjIuICAgCgpgYGB7ciBEaXNwbGF5IEVuZGFuZ2VyZWQgU3BlY2llcyBieSBLaW5nZG9tLCBlY2hvID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0KCiNDcmVhdGUgdGFibGUgdG8gZGlzcGxheSB0aGUgdG90YWwgbnVtYmVyIG9mIGVuZGFuZ2VyZWQgc3BlY2llcyBwZXIga2luZ2RvbSBwZXIgeWVhcgpraW5nZG9tcyA8LSBlc2J5X3dpdGhfdG90YWxzICU+JQogIHBpdm90X2xvbmdlcigKICAgIGNvbHMgPSBWZXJ0ZWJyYXRlczpgRnVuZ2kgJiBQcm90aXN0c2AsIAogICAgbmFtZXNfdG8gPSAia2luZ2RvbSIsIAogICAgdmFsdWVzX3RvID0gImFtb3VudCIpCgoKI0Rpc3BsYXkgdGhlIG51bWJlciBvZiBlbmRhbmdlcmVkIHNwZWNpZXMgcGVyIGtpbmdkb20gcGVyIHllYXIKZ2dwbG90KGRhdGEgPSBraW5nZG9tcywgYWVzKHggPSBZZWFyLCB5ID0gYW1vdW50LCBmaWxsID0ga2luZ2RvbSkpICsgCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsgCiAgbGFicyh4ID0gIlllYXIiLCB5ID0gIk51bWJlciBvZiBFbmRhbmdlcmVkIFNwZWNpZXMiLCB0aXRsZSA9ICJOdW1iZXIgb2YgRW5kYW5nZXJlZCBTcGVjaWVzIG9uIHRoZSBJVUNOIFJlZCBMaXN0XG5wZXIgS2luZ2RvbSBwZXIgWWVhciBmcm9tIDE5OTYtMjAyMiIpICsKICBjb29yZF9mbGlwKCkgKwogIHRoZW1lX2RhcmsoKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTE1LCBmYWNlPSJib2xkIiwgaGp1c3QgPSAwLjUpKQoKYGBgCgpUaGlzIGZpZ3VyZSBicmVha3MgZG93biB0aGUgdG90YWwgbnVtYmVyIG9mIGVuZGFuZ2VyZWQgc3BlY2llcyBvbiB0aGUgUmVkIExpc3QgcGVyIHllYXIgaW50byBraW5nZG9tcy4gSXQgaXMgZXZpZGVudCB0aGF0IHRoZXJlIGlzIHRoZSBsYXJnZXN0IG51bWJlciBvZiBlbmRhbmdlcmVkIHBsYW50IHNwZWNpZXMgcmVwb3J0ZWQgcGVyIHllYXIgd2hpbGUgZnVuZ2kgJiBwcm90aXN0cyBoYXZlIHRoZSBmZXdlc3QgcmVwb3J0ZWQgZW5kYW5nZXJlZCBzcGVjaWVzICh3aXRoIG5vbmUgcmVwb3J0ZWQgYmVmb3JlIDIwMDMpLiBJbiAyMDIyIGFsb25lLCBvdmVyIGhhbGYgb2YgdGhlIHJlcG9ydGVkIGVuZGFuZ2VyZWQgc3BlY2llcyB3ZXJlIHBsYW50cyEKCgpgYGB7ciBDb21iaW5lIEVuZGFuZ2VyZWQgU3BlY2llcyBEYXRhIHdpdGggU3VyZmFjZSBUZW1wLiBDaGFuZ2UsIGVjaG8gPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFfQoKI0NyZWF0ZSB0YWJsZSB3aXRoIGVuZGFuZ2VyZWQgc3BlY2llcyBkYXRhIGZvciAxOTk2LzE5OTggc2VwYXJhdGVkIGludG8gdGhlaXIgb3duIHJvd3MKZXNieV90b3RhbHMgPC0gZXNieV93aXRoX3RvdGFscyAlPiUKICBzZXBhcmF0ZShZZWFyLCBpbnRvID0gIlllYXIiLCBzZXAgPSAiLyIpICU+JQogIGFkZF9yb3coWWVhciA9ICcxOTk4JywgVmVydGVicmF0ZXMgPSAzMzE0LCBJbnZlcnRlYnJhdGVzID0gMTg5MSwgUGxhbnRzID0gNTMyOCwgdG90YWwgPSAxMDUzMywgLmFmdGVyID0gMSkKCiNDcmVhdGUgdGliYmxlIG9mIHllYXJseSBhdmVyYWdlIHN1cmZhY2UgdGVtcGVyYXR1cmUgY2hhbmdlCmF2Z190ZW1wX2FkanVzdGVkIDwtIHRpYmJsZShZZWFyID0gMTk2MToyMDIyLCBhdmdfdGVtcCA9IHllYXJseV9hdmdfdGVtcCRhdmdfdGVtcCkKCiNDaGFuZ2UgWWVhciBjb2x1bW4gdHlwZSB0byBpbnRlZ2VyIHNvIGl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgeWVhciBjb2x1bW4gaW4gYXZnX3RlbXBfYWRqdXN0ZWQKZXNieV90b3RhbHMgPC0gdHJhbnNmb3JtKGVzYnlfdG90YWxzLCBZZWFyID0gYXMubnVtZXJpYyhZZWFyKSkKCiNKb2luIHRlbXBlcmF0dXJlIGNoYW5nZSBkYXRhIHdpdGggZW5kYW5nZXJlZCBzcGVjaWVzIGRhdGEKam9pbmVkX3NwZWNpZXNfdGVtcCA8LSByaWdodF9qb2luKGF2Z190ZW1wX2FkanVzdGVkLCBlc2J5X3RvdGFscykKCiNEaXNwbGF5IGVuZGFuZ2VyZWQgc3BlY2llcyBkYXRhIGluIHJlbGF0aW9uIHRvIHllYXJseSBzdXJmYWNlIHRlbXBlcmF0dXJlIGNoYW5nZQpnZ3Bsb3QoZGF0YSA9IGpvaW5lZF9zcGVjaWVzX3RlbXApICsgCiAgZ2VvbV9iYXIobWFwcGluZyA9IGFlcyh4ID0gWWVhciwgeSA9IHRvdGFsLCBmaWxsID0gYXZnX3RlbXApLCBzdGF0ID0gImlkZW50aXR5IikgKyAKICBsYWJzKHggPSAiWWVhciIsIHkgPSAiVG90YWwgTnVtYmVyIG9mIEVuZGFuZ2VyZWQgU3BlY2llcyIsIHRpdGxlID0gIlRvdGFsIG51bWJlciBvZiBlbmRhbmdlcmVkIHNwZWNpZXMgb24gdGhlIElVQ04gUmVkIExpc3RcbmluIHJlbGF0aW9uIHRvIHRoZSBhbm51YWwgbWVhbiBzdXJmYWNlIHRlbXBlcmF0dXJlIGNoYW5nZVxuKEJhciBHcmFwaCkiKSArCiAgdGhlbWVfZGFyaygpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDMwLCBoanVzdCA9MSksIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT0xNSwgZmFjZT0iYm9sZCIsICBoanVzdCA9IDAuNSkpICsKICBzY2FsZV9maWxsX2NvbnRpbnVvdXMobG93PSJ5ZWxsb3ciLCBoaWdoID0gInJlZCIsIG5hbWUgPSAiQXZlcmFnZVxuVGVtcGVyYXR1cmVcbkNoYW5nZSAowrBDKSIpCgpgYGAKVGhpcyBncmFwaCBkaXNwbGF5cyB0aGUgdG90YWwgbnVtYmVyIG9mIGVuZGFuZ2VyZWQgc3BlY2llcyBvbiB0aGUgSVVDTiBSZWQgTGlzdCBmcm9tIDE5OTYtMjAyMiBpbiByZWxhdGlvbiB0byB0aGUgYW5udWFsIHN1cmZhY2UgdGVtcGVyYXR1cmUgY2hhbmdlIG1lYXN1cmVkIHdpdGggcmVzcGVjdCB0byBhIGJhc2VsaW5lIGNsaW1hdG9sb2d5IGNvbmR1Y3RlZCBmcm9tIDE5NTEgdG8gMTk4MC4gQWx0aG91Z2ggdGhlIGF2ZXJhZ2Ugc3VyZmFjZSB0ZW1wZXJhdHVyZSBjaGFuZ2UgZmx1Y3R1YXRlcyBzbGlnaHRseSBvdmVyIHRoZSB5ZWFycywgdGhlcmUgaXMgYSBnZW5lcmFsIGluY3JlYXNlIGluIHRlbXBlcmF0dXJlLiBUaGlzIGZpZ3VyZSBpbGx1c3RyYXRlcyB0aGF0IGFzIHRoZSB5ZWFycyBwcm9ncmVzcywgdGhlIHRvdGFsIG51bWJlciBvZiBlbmRhbmdlcmVkIHNwZWNpZXMgb24gdGhlIFJlZCBMaXN0IGluY3JlYXNlcywgYW5kIHRoZXJlIGlzIGEgZ2VuZXJhbCBpbmNyYXNlIGluIHN1cmZhY2UgdGVtcGVyYXR1cmUgYXMgd2VsbC4KCmBgYHtyIFNjYXR0ZXIgcGxvdCBkaXNwbGF5aW5nIGVuZGFuZ2VyZWQgc3BlY2llcyBhbmQgc3VyZmFjZSB0ZW1wZXJhdHVyZSBjaGFuZ2UgZGF0YSwgZWNobz0gRkFMU0UsIHdhcm5pbmc9RkFMU0V9CgojR2VvbV9wb2ludCBvZiBlbmRhbmdlcmVkIHNwZWNpZXMgYW5kIHN1cmZhY2UgdGVtcGVyYXR1cmUKZ2dwbG90KGRhdGEgPSBqb2luZWRfc3BlY2llc190ZW1wKSArIAogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gWWVhciwgeSA9IHRvdGFsLCBjb2xvciA9IGF2Z190ZW1wKSkgKyAKICBsYWJzKHggPSAiWWVhciIsIHkgPSAiVG90YWwgTnVtYmVyIG9mIEVuZGFuZ2VyZWQgU3BlY2llcyIsIHRpdGxlID0gIlRvdGFsIG51bWJlciBvZiBlbmRhbmdlcmVkIHNwZWNpZXMgb24gdGhlIElVQ04gUmVkIExpc3RcbmluIHJlbGF0aW9uIHRvIHRoZSBhbm51YWwgbWVhbiBzdXJmYWNlIHRlbXBlcmF0dXJlIGNoYW5nZVxuKFNjYXR0ZXIgUGxvdCkiKSArCiAgdGhlbWVfZGFyaygpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDMwLCBoanVzdCA9MSksIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT0xNSwgZmFjZT0iYm9sZCIsICBoanVzdCA9IDAuNSkpICsKICBzY2FsZV9jb2xvcl9jb250aW51b3VzKGxvdz0ieWVsbG93IiwgaGlnaCA9ICJyZWQiLCBuYW1lID0gIkF2ZXJhZ2VcblRlbXBlcmF0dXJlXG5DaGFuZ2UgKMKwQykiKSArIAogIGdlb21fc21vb3RoKG1hcHBpbmcgPSBhZXMoeCA9IFllYXIsIHkgPSB0b3RhbCksIGNvbG9yID0gIndoaXRlIiwgbGluZXdpZHRoID0gMC41KQpgYGAKClRoaXMgZmlndXJlIGlsbHVzdHJhdGVzIGFuIGV4cG9uZW50aWFsIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0b3RhbCBudW1iZXIgb2YgZW5kYW5nZXJlZCBzcGVjaWVzIG9uIHRoZSBSZWQgTGlzdCBhbmQgdGltZS4gVGhlIGNvbG9yIG9mIHRoZSBwb2ludHMgZGVtb25zdHJhdGVzIHRoYXQgdGhlcmUgaXMgYSBnZW5lcmFsIGluY3JlYXNlIGluIGF2ZXJhZ2Ugc3VyZmFjZSB0ZW1wZXJhdHVyZSBvdmVyIHRpbWUgYXMgd2VsbC4gCgojIyBfTm93IGxldCdzIGludmVzdGlnYXRlIHRoZXNlIHRyZW5kcyBieSBjb3VudHJ5Ol8KCmBgYHtyIE51bWJlciBvZiBFbmRhbmdlcmVkIFNwZWNpZXMgUGVyIENvdW50cnkgYXMgb2YgMjAxOSwgZWNobyA9IEZBTFNFfQoKI0NyZWF0ZSBkYXRhIGZyYW1lIG9mIHRvcCAxMCBjb3VudHJpZXMgd2l0aCB0aGUgbW9zdCByZXBvcnRlZCBlbmRhbmdlcmVkIHNwZWNpZXMKdG9wXzEwIDwtIGNvdW50cnlfZW5kYW5nX3NwZWNpZXMgJT4lCiAgYXJyYW5nZShkZXNjKFRvdGFsKSkgJT4lCiAgZmlsdGVyKFJhbmsgPCAxMSkgCgojQ3JlYXRlIGdyYXBoIGRpc3BsYXlpbmcgdGhlIHRvdGFsIG51bWJlciBvZiBlbmRhbmdlcmVkIHNwZWNpZXMgcGVyIGNvdW50cnkKZ2dwbG90KGRhdGEgPSB0b3BfMTAsIG1hcHBpbmcgPSBhZXMoeCA9IFRvdGFsLCB5ID0gZmN0X3Jlb3JkZXIoQ291bnRyeSwgVG90YWwpLCBmaWxsID0gVG90YWwpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsgCiAgbGFicyh4ID0gIlRvdGFsIE51bWJlciBvZiBFbmRhbmdlcmVkIFNwZWNpZXMiLCB5ID0gIkNvdW50cmllcyB3aXRoIHRoZSBNb3N0IEVuZGFuZ2VyZWQgU3BlY2llcyIsIHRpdGxlID0gIlRvdGFsIE51bWJlciBvZiBFbmRhbmdlcmVkIFNwZWNpZXMgcGVyIENvdW50cnlcbihhcyBvZiAyMDE5KSIpICsKICBzY2FsZV9maWxsX3ZpcmlkaXMoKSArIHRoZW1lX2RhcmsoKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTE1LCBmYWNlPSJib2xkIiwgaGp1c3QgPSAwLjUpKSArCiAgZ2VvbV90ZXh0KGFlcyh4ID0gVG90YWwtMjAsIGxhYmVsID0gVG90YWwpLCBjb2xvciA9ICJncmF5Iiwgc2l6ZSA9IDMpCmBgYAoKVGhpcyBmaWd1cmUgZGlzcGxheXMgdGhlIG51bWJlciBvZiBlbmRhbmdlcmVkIHNwZWNpZXMgcmVwb3J0ZWQgcGVyIGNvdW50cnkgYXMgb2YgMjAxOS4gVGhpcyBmaWd1cmUgZm9jdXNlcyBvbiB0aGUgdG9wIDEwIGNvdW50cmllcyB3aXRoIHRoZSBsYXJnZXN0IG51bWJlcnMgb2YgZW5kYW5nZXJlZCBzcGVjaWVzLCBtYWtpbmcgaXQgZXZpZGVudCB0aGF0IE1leGljbyBoYXMgdGhlIG1vc3QgKGByIHRvcF8xMCRUb3RhbFsxXWAgc3BlY2llcyB0byBiZSBleGFjdCkuIFRoZSBVbml0ZWQgU3RhdGVzIGlzIHJhbmtlZCAjYHIgdG9wXzEwJFJhbmtbNl1gIHdpdGggYHIgdG9wXzEwJFRvdGFsWzZdYCBlbmRhbmdlcmVkIHNwZWNpZXMgYXMgb2YgMjAxOS4KCiMjIE1hcCBEaXNwbGF5aW5nIHRoZSBOdW1iZXIgb2YgRW5kYW5nZXJlZCBTcGVjaWVzIHBlciBDb3VudHJ5IAoKYGBge3IgTWFwIG9mIEVuZGFuZ2VyZWQgU3BlY2llcyBwZXIgY291bnRyeSBhcyBvZiAyMDE5LCBlY2hvID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0KCiNBZGQgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBpbmZvcm1hdGlvbiB0byB0aGUgc3VyZmFjZSB0ZW1wZXJhdHVyZSBjaGFuZ2UgZGF0YQpsYXRfbG9uZyA8LSBjb3VudHJpZXMgJT4lCiAgbXV0YXRlKElTTzIgPSBjb3VudHJ5KSAlPiUKICBpbm5lcl9qb2luKHN1cmZhY2VfdGVtcCwgYnkgPSAiSVNPMiIpCgojQWRkIHRoZSBudW1iZXIgb2YgZW5kYW5nZXJlZCBzcGVjaWVzIHRvIHRoZSBwcmV2aW91c2x5IGpvaW5lZCBkYXRhc2V0CmNvdW50cmllc190ZW1wc19zcGVjaWVzIDwtIGxhdF9sb25nICU+JQogIGlubmVyX2pvaW4oY291bnRyeV9lbmRhbmdfc3BlY2llcywgYnkgPSAiQ291bnRyeSIpCgojQ3JlYXRlIG1hcCBkaXNwbGF5aW5nIHRoZSBsb2NhdGlvbnMgb2YgZW5kYW5nZXJlZCBzcGVjaWVzIHdpdGggdGhlIGNvbG9yIG9mIHRoZSBwb2ludCByZXByZXNlbnRpbmcgdGhlIHRvdGFsIG51bWJlcgptYXB2aWV3KGNvdW50cmllc190ZW1wc19zcGVjaWVzLCB4Y29sID0gImxvbmdpdHVkZSIsIHljb2wgPSAibGF0aXR1ZGUiLCB6Y29sID0gIlRvdGFsIiwgY3JzID0gNDMyNiwgZ3JpZCA9IEZBTFNFLCBsYWJlbCA9ICJUb3RhbCIpCgpgYGAKVGhpcyBtYXAgaWxsdXN0cmF0ZXMgd2hlcmUgaW4gdGhlIHdvcmxkIGNvdW50cmllcyB3aXRoIHJlcG9ydGVkIG51bWJlcnMgb2YgZW5kYW5nZXJlZCBzcGVjaWVzIGFyZSBsb2NhdGVkLiBUaGUgY29sb3Igb2YgdGhlIHBvaW50IGNvcnJlbGF0ZXMgdG8gdGhlIHRvdGFsIG51bWJlciBvZiBlbmRhbmdlcmVkIHNwZWNpZXMgZm9yIHRoYXQgcGFydGljdWxhciBjb3VudHJ5LiBgciB0b3BfMTAkQ291bnRyeVsxXWAgaGFzIGEgYnJpZ2h0IHllbGxvdyBwb2ludCBiZWNhdXNlIGl0IGhhcyB0aGUgaGlnaGVzdCByZXBvcnRlZCBudW1iZXIgb2YgZW5kYW5nZXJlZCBzcGVjaWVzLiBNYW55IG9mIHRoZSBvdGhlciBjb3VudHJpZXMgaGF2ZSBsZXNzIHRoYW4gMTAwIGVuZGFuZ2VyZWQgc3BlY2llcywgZXhwbGFpbmluZyB0aGUgYWJ1bmRhbmNlIG9mIHB1cnBsZSBwb2ludHMuCgoKYGBge3IgV29ybGQgVGVtcHMsIGluY2x1ZGUgPSBGQUxTRX0KCiMyMDE5IHN1cmZhY2UgdGVtcGVyYXR1cmUgY2hhbmdlcwp0ZW1wc18yMDE5IDwtIHN1cmZhY2VfdGVtcCAlPiUKICBzZWxlY3QoQ291bnRyeSwgSVNPMywgRjIwMTkpICU+JQogIG11dGF0ZShpc29fYTMgPSBJU08zKQoKI2RhdGEgdG8gY3JlYXRlIHdvcmxkIG1hcAp3b3JsZCA8LSBuZV9jb3VudHJpZXMoc2NhbGUgPSAibGFyZ2UiLCByZXR1cm5jbGFzcyA9ICJzZiIpCgojTWVyZ2UgMjAxOSB0ZW1wZXJhdHVyZSBkYXRhIHdpdGggdGhlIHdvcmxkIG1hcCBkYXRhIHRvIGRpc3BsYXkKbWFwX2RhdGEgPC0gbWVyZ2Uod29ybGQsIHRlbXBzXzIwMTksIGJ5ID0gImlzb19hMyIsIGFsbC54ID0gVFJVRSkKCiNBZGQgJ25hbWUnIGNvbHVtbiB0byB0b3BfMTAgdG8gam9pbiB0aGUgdGFibGVzCnRvcF8xMCA8LSB0b3BfMTAgJT4lCiAgbXV0YXRlKG5hbWVfbG9uZyA9IENvdW50cnkpCgojTWVyZ2UgdGhlIGVuZGFuZ2VyZWQgc3BlY2llcyBwZXIgY291bnRyeSBkYXRhIHdpdGggdGhlIHByZXZpb3VzbHkgbWVyZ2VkIGRhdGEKdG9wXzEwX2Nvb3JkIDwtIG1lcmdlKHRvcF8xMCwgbWFwX2RhdGEsIGJ5ID0gIm5hbWVfbG9uZyIpCmBgYAoKYGBge3IgTGlzdCBDb2xuYW1lcyBmb3IgbWFwX2RhdGEsIGluY2x1ZGUgPSBGQUxTRX0KCiNMaXN0IGNvbHVtbiBuYW1lcyBmb3IgbWFwX2RhdGEgdG8gZW5zdXJlIGNvbnRpbmVudCBkYXRhIGlzIGluY2x1ZGVkIApjb2xuYW1lcyhtYXBfZGF0YSkKCmBgYAoKYGBge3IgRmFjZXQgYnkgY29udGluZW50LCBlY2hvID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0KCmdncGxvdChkYXRhID0gbWFwX2RhdGEpICsgCiAgZ2VvbV9iYXIobWFwcGluZyA9IGFlcyh4ID0gQ291bnRyeSwgeSA9IEYyMDE5LCBmaWxsID0gRjIwMTkpLCBzdGF0ID0gImlkZW50aXR5IikgKyAKICBmYWNldF93cmFwKH4gY29udGluZW50LCBucm93ID0gMikgKwogIGxhYnMoeCA9ICJDb3VudHJ5IiwgeSA9ICJDaGFuZ2UgaW4gU3VyZmFjZSBUZW1wZXJhdHVyZSAowrBDKSIsIHRpdGxlID0gIjIwMTkgU3VyZmFjZSB0ZW1wZXJhdHVyZSBjaGFuZ2UgcGVyIGNvdW50cnlcbm1lYXN1cmVkIHdpdGggcmVzcGVjdCB0byBhIGJhc2VsaW5lIGNsaW1hdG9sb2d5XG4oQmFyIEdyYXBoKSIpKwogIHRoZW1lX2RhcmsoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2NSwgaGp1c3QgPTEsIHNpemUgPSAxKSwgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTE1LCBmYWNlPSJib2xkIiwgIGhqdXN0ID0gMC41KSwgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNykpICsKICBzY2FsZV9maWxsX2NvbnRpbnVvdXMobG93PSJ5ZWxsb3ciLCBoaWdoID0gInJlZCIsIG5hbWUgPSAiVGVtcGVyYXR1cmVcbkNoYW5nZVxuaW4gMjAxOSAowrBDKSIpCgpgYGAKClRoaXMgZmlndXJlIG1ha2VzIGl0IGV2aWRlbnQgdGhhdCBFdXJvcGVhbiBjb3VudHJpZXMgaGF2ZSBleHBlcmllbmNlZCB0aGUgZ3JlYXRlc3Qgc3VyZmFjZSB0ZW1wZXJhdHVyZSBjaGFuZ2VzIGR1ZSB0byB0aGUgYWJ1bmRhbmNlIG9mIHJlZCBiYXJzLiBPY2VhbmlhIGFuZCBTb3V0aCBBbWVyaWNhIGFwcGVhciB0byBoYXZlIGxlc3MgZGF0YSBwb2ludHMsIHlldCBhbHNvIGxlc3NlciBjaGFuZ2VzIGluIHN1cmZhY2UgdGVtcGVyYXR1cmUgYXMgb2YgMjAxOS4gVGhlcmUgd2FzIG5vIGRhdGEgZm9yIEFudGFyY3RpY2EuCgpgYGB7ciBNYXAgb2Ygc3VyZmFjZSB0ZW1wIGNoYW5nZXMgcGVyIGNvdW50cnksIGVjaG8gPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFfQpnZ3Bsb3QoZGF0YSA9IG1hcF9kYXRhLCBhZXMoZ2VvbWV0cnkgPSBnZW9tZXRyeSkpICsKICBnZW9tX3NmKGFlcyhmaWxsID0gRjIwMTkpKSArCiAgZ2VvbV9zZl9sYWJlbChhZXMobGFiZWwgPSBUb3RhbCksIGRhdGEgPSB0b3BfMTBfY29vcmQsIGxhYmVsLnBhZGRpbmcgPSB1bml0KDAuMSwgImxpbmVzIiksIHNpemUgPSAxLjUpICsKICBsYWJzKHggPSAiICIsIHkgPSAiICIsIHRpdGxlID0gIjIwMTkgU3VyZmFjZSB0ZW1wZXJhdHVyZSBjaGFuZ2UgcGVyIGNvdW50cnlcbm1lYXN1cmVkIHdpdGggcmVzcGVjdCB0byBhIGJhc2VsaW5lIGNsaW1hdG9sb2d5XG4oTWFwKSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MTUsIGZhY2U9ImJvbGQiLCAgaGp1c3QgPSAwLjUpKSArCiAgc2NhbGVfZmlsbF9jb250aW51b3VzKGxvdz0ieWVsbG93IiwgaGlnaCA9ICJyZWQiLCBuYW1lID0gIlRlbXBlcmF0dXJlXG5DaGFuZ2VcbmluIDIwMTkgKMKwQykiKQpgYGAKClRoaXMgbWFwIGlsbHVzdHJhdGVzIHN1cmZhY2UgdGVtcGVyYXR1cmUgY2hhbmdlIGluIDIwMTkgcGVyIGNvdW50cnkgbWVhc3VyZWQgd2l0aCByZXNwZWN0IHRvIGEgYmFzZWxpbmUgY2xpbWF0b2xvZ3kgKGNvbmR1Y3RlZCBmcm9tIDE5NTEtMTk4MCkuIFRoZSBzY2FsZSBvbiB0aGUgcmlnaHQgaW5kaWNhdGVzIHRoYXQgdGhlIGRhcmtlciB0aGUgY291bnRyeSBpcyBmaWxsZWQgaW4sIHRoZSBoaWdoZXIgdGhlIGNoYW5nZSBpbiBzdXJmYWNlIHRlbXBlcmF0dXJlIGl0IGV4cGVyaWVuY2VkIGluIDIwMTkuIFRoZSBsYWJlbHMgaW5kaWNhdGUgdGhlIG51bWJlciBvZiBlbmRhbmdlcmVkIHNwZWNpZXMgaW4gdGhlIHRvcCAxMCBjb3VudHJpZXMgd2l0aCB0aGUgaGlnaGVzdCBudW1iZXIgb2YgcmVwb3J0ZWQgZW5kYW5nZXJlZCBzcGVjaWVzIGFzIG9mIDIwMTkuIEFsdGhvdWdoIGByIHRvcF8xMCRDb3VudHJ5WzFdYCBoYXMgdGhlIG1vc3QgZW5kYW5nZXJlZCBzcGVjaWVzLCBpdCBoYXMgbm90IG5lY2Vzc2FyaWx5IGV4cGVyaWVuY2VkIHRoZSBncmVhdGVzdCBjaGFuZ2UgaW4gc3VyZmFjZSB0ZW1wZXJhdHVyZS4gCgojIE1haW4gQ29uY2x1c2lvbnMgClRoZSBtYWluIGNvbmNsdXNpb25zIGRlbW9uc3RyYXRlZCBieSB0aGUgZmlndXJlcyBhYm92ZSBzaG93IHRoYXQgdGhlIG51bWJlciBvZiBlbmRhbmdlcmVkIHNwZWNpZXMgaW5jcmVhc2VzIGFzIHN1cmZhY2UgdGVtcGVyYXR1cmVzIGluY3JlYXNlLCBhbHRob3VnaCB0aGVyZSBpc24ndCBuZWNlc3NhcmlseSBhIGRpcmVjdCBjb3JyZWxhdGlvbiBiZXR3ZWVuIHRoZSB0d28uIFRoZSBzdHVkeSBvZiB0aGVzZSB0cmVuZHMgd2lsbCBiZW5lZml0IGdvdmVybm1lbnQgYWdlbmNpZXMgc3VjaCBhcyB0aGUgV29ybGQgV2lsZGxpZmUgRnVuZCwgdGhlIFUuUy4gRmlzaCBhbmQgV2lsZGxpZmUgU2VydmljZSwgYW5kIG90aGVyIGFnZW5jaWVzIGludGVyZXN0ZWQgaW4gdGhlIHByZXNlcnZhdGlvbiBvZiBlbmRhbmdlcmVkIGFuaW1hbCBzcGVjaWVzLiBUaGVzZSBpbnRlcmFjdGlvbnMgY2FuIGJlIHN0dWRpZWQgbW9yZSBjbG9zZWx5IGluIHRoZSBmdXR1cmUgYnkgZm9jdXNpbmcgb24gYSBwYXJ0aWN1bGFyIGdlb2dyYXBoaWMgYXJlYSBhbmQgdGhlIHR5cGVzIG9mIGVuZGFuZ2VyZWQgc3BlY2llcyBsb2NhdGVkIHRoZXJlLiBUaGVyZSBpcyBubyBzaW5ndWxhciBzb2x1dGlvbiB0byBnbG9iYWwgd2FybWluZywgaG93ZXZlciBpbiBvcmRlciBmb3IgY2VydGFpbiBzcGVjaWVzIHRvIHJlbWFpbiBleGlzdGVudCBvbiBFYXJ0aCwgc29tZXRoaW5nIG11c3QgYmUgZG9uZSB0byBzbG93IGNsaW1hdGUgY2hhbmdlLgoKIVtUZW4gYW5pbWFscyBvbiBUaGUgSVVDTiBSZWQgTGlzdCBvZiBUaHJlYXRlbmVkIFNwZWNpZXNdKERlc2t0b3AvR0NTLVIvZW5kLmpwZykKCiMgUmVmZXJlbmNlcwpBbHZlcywgQi4gKDIwMjMpLiBDb3VudHJpZXMgd2l0aCB0aGUgbW9zdCBlbmRhbmdlcmVkIHNwZWNpZXMgMjAxOS4gU3RhdGlzdGEuIFJldHJpZXZlZCBBcHJpbCAyNCwgMjAyMywgZnJvbSBodHRwczovL3d3dy5zdGF0aXN0YS5jb20vc3RhdGlzdGljcy8xMjc1NDkxL21vc3QtZW5kYW5nZXJlZC1zcGVjaWVzLWJ5LWNvdW50cnkvCgpEZWxhY2gsIEEuLCBDYWxkYXMsIEEuLCBFZHNvbiwgSy5NLiBldCBhbC4gKDIwMTkpIEFnZW5jeSBwbGFucyBhcmUgaW5hZGVxdWF0ZSB0byBjb25zZXJ2ZSBVUyBlbmRhbmdlcmVkIHNwZWNpZXMgdW5kZXIgY2xpbWF0ZSBjaGFuZ2UuIE5hdHVyZSBDbGltYXRlIENoYW5nZSwgOSwgOTk54oCTMTAwNC4gCmh0dHBzOi8vZG9pLm9yZy8xMC4xMDM4L3M0MTU1OC0wMTktMDYyMC04CgpDb2hlbiwgRS4gKG4uZC4pLiBDb3VudHJpZXMgZ2VvZ3JhcGhpYyBjb29yZGluYXRlcy4gS2FnZ2xlLiBSZXRyaWV2ZWQgQXByaWwgMjYsIDIwMjMsIGZyb20gaHR0cHM6Ly93d3cua2FnZ2xlLmNvbS9kYXRhc2V0cy9laWRhbmNoL2NvdW50aWVzLWdlb2dyYXBoaWMtY29vcmRpbmF0ZXMKCkZsYWNoLCBULiAoMjAyMCkuIDI2IGVuZGFuZ2VyZWQgYW5pbWFscyB3ZSBuZWVkIHRvIHNhdmUgbm93LiBDTiBUcmF2ZWxsZXIuIFJldHJpZXZlZCBBcHJpbCAyOSwgMjAyMywgZnJvbSBodHRwczovL3d3dy5jbnRyYXZlbGxlci5jb20vZ2FsbGVyeS9lbmRhbmdlcmVkLWFuaW1hbHMKCkhzaXVuZywgVy4sICYgU3Vuc3RlaW4sIEMuIFIuICgyMDA3KS4gQ2xpbWF0ZSBjaGFuZ2UgYW5kIGFuaW1hbHMuIFVuaXZlcnNpdHkgb2YgUGVubnN5bHZhbmlhIExhdyBSZXZpZXcsIDE1NSg2KSwgMTY5NS0xNzQwLgoKSW50ZXJuYXRpb25hbCBNb25ldGFyeSBGdW5kLiAoMjAyMikuIENsaW1hdGUgQ2hhbmdlIERhdGEuIENsaW1hdGUgQ2hhbmdlIEluZGljYXRvcnMgRGFzaGJvYXJkLiBSZXRyaWV2ZWQgQXByaWwgMjEsIDIwMjMsIGZyb20gaHR0cHM6Ly9jbGltYXRlZGF0YS5pbWYub3JnL3BhZ2VzL2NsaW1hdGVjaGFuZ2UtZGF0YQoKUnVobCwgSi4gSi4gKDIwMDgpLiBDbGltYXRlIGNoYW5nZSBhbmQgdGhlIGVuZGFuZ2VyZWQgc3BlY2llcyBhY3Q6IGJ1aWxkaW5nIGJyaWRnZXMgdG8gdGhlIApuby1hbmFsb2cgZnV0dXJlLiBCb3N0b24gVW5pdmVyc2l0eSBMYXcgUmV2aWV3LCA4OCgxKSwgMS02Mi4gCgpTdGF0aXN0YSBSZXNlYXJjaCBEZXBhcnRtZW50LiAoMjAyMikuIFNwZWNpZXMgb24gdGhlIFJlZCBMaXN0IHVwIHRvIDIwMjIuIFN0YXRpc3RhLiBSZXRyaWV2ZWQgQXByaWwgMjEsIDIwMjMsIGZyb20gaHR0cHM6Ly93d3cuc3RhdGlzdGEuY29tL3N0YXRpc3RpY3MvMjY0ODQxL2Jpb2RpdmVyc2l0eS1hbmltYWxzLW9uLXRoZS1yZWQtbGlzdC8KCgo=